package com.xz.example.model;

/**
 * @author 张志航     
 * @version V1.0.0
 * @projectName design_mode
 * @title     StaticSingletion   
 * @package    com.xz.example.model  
 * @date   2019/12/3 15:40  
 * @explain
 */
// 使用静态内部类的方式实现(堪称完美的实现方案)
public class StaticSingletion {

    private StaticSingletion() {
    }

    private static class HolderClass{
        private final static StaticSingletion instance = new StaticSingletion();
    }

    /**
     * 在第一次加载时将调用内部类HolderClass且该类为静态内部类，只会被加载一次，在该类内部定义了一个static类型的StaticSingletion，
     * 由Java虚拟机保证其线程的安全性，由于getInstance不需要再被任何线程锁定，所以对性能不会造成影响。
     * @return
     */
    public static StaticSingletion getInstance(){
        return HolderClass.instance;
    }

    public static void main(String[] args) {
        StaticSingletion s1,s2;
        s1 = StaticSingletion.getInstance();
        s2 = StaticSingletion.getInstance();
        System.out.println(s1 == s2);
    }
}
